#pragma once

#include "EZTransport.h"
#include <set>

namespace EZTcp {
    class EZTimer;
    class EZSocketFD;
}

class EZNoTlsTransport
{
public:
	EZNoTlsTransport();
	~EZNoTlsTransport();

    void set_proxy(const std::string& p) {
        proxy_ = p;
    }

protected:
	ez_socket_t ts_accept(EZTcp::EZLoop* loop, ez_socket_t fd, const new_con_cb& new_con);

	ez_socket_t ts_connect(const std::string& url);

    ez_socket_t ts_async_connect(EZTcp::EZLoop* loop, int timeout_ms,
        const std::string& url, const async_connect_cb& cb);

	int ts_recv(ez_socket_t fd,char* data, int len);

	int ts_send(ez_socket_t fd,const char* data, int len);

	int ts_close(ez_socket_t fd);

private:
    void connect_write_handler(std::weak_ptr<EZTcp::EZTimer> tptr, async_connect_cb cb,
        std::weak_ptr<EZTcp::EZSocketFD> fd_ptr);
    void connect_timeout(std::shared_ptr<EZTcp::EZTimer> tptr, async_connect_cb cb, 
        std::shared_ptr<EZTcp::EZSocketFD> fd_ptr, const std::error_code& e);

private:
    std::string     proxy_;
};

